Sektion: Visu
SEC Visu //optional: yes, modifier: [UPDATE]
Toplevel_Tab; //optional: yes, type: bool
Embedded := [%PAGE_VISU%, <visu1>,...]; //optional: yes, type: VisuList
Embedded_Proxy := [%PAGE_VISU%, <visu1>,...]; //optional: yes, type: VisuList
Page =: [<visu1>, <visu2>,...]; //optional: yes, type: VisuList
SEC DefaultEmbeddings //optional: yes
SEC Embedding : <visu identifier> //optional: yes, modifier: [HIDE, UPDATE]
VisuName := <visu name>; //optional: no, type: literal
Target := <target name>; //optional: yes, type: literal
ProxyVisuName := <visu name>; //optional: yes, type: literal
LinkId := <linkID>; //optional: yes, type: literal
END_SEC
END_SEC
SEC Toplevel_Tab_Hotkey //optional: yes
Hotkey := <keycode>; //optional: no, type: literal
Modifiers := <modifier>; //optional: yes, modifier: [SHIFT, CONTROL, ALT]
END_SEC
END_SECDetails über die Syntax der Definitionstypen sind im Kapitel Syntax der Moduldeklaration beschrieben.
Toplevel_Tablegt fest, ob die Checkbox Erzeuge Toplevel-Reiter im HMI-Editor standardmäßig aktiviert ist oder nicht.Pagedefiniert eine Liste von verfügbaren Visualisierungsobjekten eines Submoduls.Embeddeddefiniert eine konkrete Liste der verfügbaren Visualisierungsobjekte des Submoduls, die in andere Visualisierungsbilder eingebettet werden.Der Platzhalter
%PAGE_VISU%anstelle des Visualisierungsnamens ermöglicht, dass die erzeugten Visualisierungsbilder optional in andere Seiten eingebettet werden.Embedded_Proxydefiniert eine Liste von verfügbaren Visualisierungsobjekten des Moduls. Die Liste wird nur dann verwendet, wenn einDecoupled-Modulin einenDecoupled-Sloteingefügt wird und nicht unter derselben Steuerung wie seine Vater-Modulinstanz (also als Proxy) erzeugt wird.Für Module, die ein anderes Module importieren, kann anstelle des Visualisierungsnamens der Platzhalter
%NONE%eingesetzt werden. Dies bewirkt ein Verstecken der importierten Visualisierungen. Dieses Vorgehen ist für sowohl für die Liste der Visualisierungsbilder als auch für eingebettete (Proxy-)Visualisierungsbilder möglich.Sektion
DefaultEmbeddings: Diese Sektion dient der Angabe von Standardeinbettungen, die dann auf der Registerkarte HMI eines Submoduls bereits vorkonfiguriert erscheinen (ähnlich der SektionDefault_Allocation, siehe Sektion Slots). Die gewünschten Standardeinbettungen werden dazu in UntersektionenEmbeddingbeschrieben.Voraussetzung: Das angegebene Visualisierungsobjekt und der Proxy müssen in der Liste der möglichen Einbettungen für dieses Modul enthalten sein (siehe oben:
EmbeddedundEmbedded_Proxy).Sektion
Toplevel_Tab_Hotkey: Diese Sektion definiert ein Tastaturkürzel als Standardeinstellung für eine Toplevel-Seite. Tastaturkürzel dürfen nicht mehrfach verwendet werden. Diese Einstellung kann im Moduleditor in der Registerkarte HMI angepasst werden.
SEC Visu
Toplevel_Tab ;
Page := [VISU_CNC_Machine_1, VISU_CNC_Machine_2];
Embedded := [%PAGE_VISU%];
SEC DefaultEmbeddings
SEC Embedding : No1
VisuName := SubModule_Emb;
Target := '../../TopLevel_2';
END_SEC
SEC Embedding : No2
VisuName := SubModule_Emb_2;
//ProxyVisuName := SubModule_Emb_1;
Target := '';// leave empty for next ancestor
END_SEC
END_SEC
SEC Toplevel_Tab_Hotkey
Hotkey := T;
Modifiers := SHIFT | CONTROL;
END_SEC
END_SECDer Visualisierungsname ist der Name des entsprechenden Visualisierungsobjekts, wobei Groß- und Kleinschreibung keine Rolle spielt. Das Visualisierungsobjekt muss sich in der selben Hierarchieebene befinden wie der Funktionsbaustein des Moduls.
Alle Visualisierungsobjekte und eingebetteten Visualisierungsobjekte können eine VAR_IN_OUT-Variable mit Namen
instvom Typ des Modulfunktionsbausteins oder einer Basisklasse haben (Groß- und Kleinschreibung beim Variablennamen spielt keine Rolle).VAR_IN_OUTinst : <MODULE_FB> ;END_VARAlternativ zu der hier beschriebenen Möglichkeit mit VAR_IN_OUT kann auch eine VAR_INPUT-Variable verwendet werden. Diese Variable muss folgende Anforderungen erfüllen:
Name:
instTyp: Interface, das der Modulfunktionsbaustein implementiert
Eingebettete Visualisierungsobjekte können zusätzlich zwei weitere Variablen haben (Groß- und Kleinschreibung bei den Parameternamen spielt keine Rolle):
VAR_INPUTpaVisuFB : POINTER TO POINTER TO AC_Visu_Base ;iOwnFrameIndex : INT ;END_VAREs müssen entweder beide oder keine dieser Variablen vorhanden sein. Diese beiden Variablen geben eingebetteten Visualisierungen die Möglichkeit, den zentralen Frame in der Toplevel-Visualisierung umzuschalten.
paVisuFBist ein Array von Pointern aufAC_Visu_Base-Instanzen. Über die globale VisualisierungsvariableCURRENTCLIENTIDkann auf die korrekte Instanz des aktuellen Clients zugegriffen werden. Die Frame-Umschaltung erfolgt über eine ST-Aktion der FormpaVisuFB[CURRENTCLIENTID]^.uiFrameIdx := iOwnFrameIndex ;iOwnFrameIndexist der Index, den das Visualisierungsbild des eigenen Moduls in diesem Toplevel-Frame hat. (Falls das eigene Modul kein Visualisierungsbild definiert ist dieser Index -1.)Außer den oben genannten Variablen darf die Schnittstelle keine weiteren VAR_INPUT, VAR_OUTPUT oder VAR_INOUT Variablen aufweisen.
Die
AC_Visu_Base-Instanzen bieten zusätzlich noch die FunktionGetModuleFrameIndex, die für beliebige Modulinstanzen (sieheIModuleinAC_Module_Base.library)den Index ihres Visualisierungsbilds in der Toplevelvisualisierung zurück gibt (falls überhaupt ein Visualisierungsbild vorhanden ist). Damit ist es möglich, zu beliebigen Visualisierungensbilder im Modulinstanz-Baum zu springen. Um die Navigation auch innerhalb des Codes von Modulen zu ermöglichen, besitzt das Environment der Module (sieheIModuleinAC_Module_Base.library) ein MemberEnvironment.visus, das obigempaVisuFB-Pointer entspricht.
Tipp
Um die Variable CURRENTCLIENTID verwenden zu können, muss die Bibliothek VisuGlobalClientManager eingebunden werden (Kategorie „Intern|Visu“).
Die erste Visualisierung wird als Standardeinstellung verwendet.